import { getToken } from '@/utils/auth';

// 登录页面
const loginPage: string = "/pages/login";

// 页面白名单
const whiteList: string[] = [
    '/pages/login'
]

// 检查地址白名单
function checkWhite(url: string): boolean {
    try {
        if (!url || typeof url !== 'string') {
            console.error('checkWhite: url is invalid:', url);
            return false;
        }
        const path = url.split('?')[0];
        const result = whiteList.indexOf(path) !== -1;
        console.log('checkWhite:', url, '->', path, 'result:', result);
        return result;
    } catch (error) {
        console.error('Error in checkWhite:', error);
        return false;
    }
}

// 页面跳转验证拦截器
const list: string[] = ["navigateTo", "redirectTo", "reLaunch", "switchTab"];

interface NavigateOptions {
    url: string
    [key: string]: any
}

list.forEach(item => {
    uni.addInterceptor(item, {
        invoke(to: NavigateOptions): boolean {
            try {
                console.log(`路由拦截器 ${item}:`, to);

                if (!to || !to.url) {
                    console.error('路由参数无效:', to);
                    return false;
                }

                const token = getToken();
                console.log('当前token:', token ? '存在' : '不存在');

                if (token) {
                    if (to.url === loginPage) {
                        console.log('已登录用户访问登录页，重定向到首页');
                        uni.reLaunch({ url: "/pages/index/index" });
                    }
                    return true;
                } else {
                    const isWhite = checkWhite(to.url);
                    if (isWhite) {
                        console.log('访问白名单页面，允许通过');
                        return true;
                    } else {
                        console.log('未登录访问受保护页面，重定向到登录页');
                        uni.reLaunch({ url: loginPage });
                        return false;
                    }
                }
            } catch (error) {
                console.error(`路由拦截器 ${item} 出错:`, error);
                return false;
            }
        },
        fail(err: any): void {
            console.error(`路由 ${item} 失败:`, err);
        }
    })
})